#coding=utf-8
"""
一、简答题
1. 列表list_1 = [[1,2,3,4,5],[{“name”:”张三”,”age”:28},{“name”:”James”:”age:30}]] ,获取James的年龄
# """
# list_1=[[1,2,3,4,5],[{'name':'张三','age':28},{'name':'James','age':30}]]
# print(list_1[1][1]['age'])

'''---------------------------------------------------------------------------------------------
2. 名词解释: 可迭代对象、迭代器、生成器、装饰器
可迭代对象:可以用for循环来遍历的对象叫做可迭代对象(iterable)
迭代器:以被next调用并不断返回下一个值的对象叫做迭代器，迭代器一定是可迭代对象，要有_iter_和_next_方法（iterator）
生成器:  它是在for循环的过程中不断计算出下一个元素，并在适当的条件结束for循环。对于函数改成的generator来说，
遇到return语句或者执行到函数体最后一行语句，就是结束generator的指令，for循环随之结束。
是一种特殊的迭代器(generator)节省内存和CPU， 可以用更少的代码来实现相似的功能（可以用yield返回）
装饰器:在代码运行期间动态增加功能的方式叫做装饰器decorator ，也可以将一样功能的代码封装供其它函数使用       
'''
'''----------------------------------------------------------------------------------------------
3. 名词解释：面向对象编程中“类”中有几种方法？分别解释各种方法的用途。
实例方法：类的实例才能够调用，用于同一个类不同对象实现不同功能的情况
静态方法：不可以访问，需通过传值方式使用
类方法：是将类本身作为对象进行操作的方法，类和类的实例都可以使用。

'''
'''---------------------------------------------------------------------------------------------
4. 输出以下代码运行结果，解释变量作用域LEGB.

2 9 6
func_inner 7 9
'''
x=2
z=3
def func_outer():
    y=9
    x=0
    global z
    def func_inner():
        nonlocal x
        x+=5
        z=6
        print('func_inner',max(x,z),max(x,y),x,y,z)
    z+=3
    x+=2
    print(x,y,z)
    return func_inner
func_outer()()
# func_inner()的x是被定义成外层作用域变量,z是被定义成当前模块的全局变量，y则是一个普通的函数变量。当func_inner()运行时，x是从E作用域开始查找，z是从G作用域开始查找，y是从L作用域开始查找，L找不到，到E找，E找到了，就结束查找。所以最终func_inner()的x，y，z为7,9,6。
#
#func_outer()，z是全局变量，x，y是普通的函数变量。z是从G作用域开始查找，x，y是从L作用域开始查找，最终func_outer()的x，y，z为2,9,6

# L-Local(function)：函数内的名字空间
# E-Enclosing function locals：外部嵌套函数的名字空间
# G-Global(module)：函数定义所在模块（文件）的名字空间
# B-Builtin(Python)：Python内置模块的名字空间
# LEGB规定了查找一个名称的顺序为：local-->enclosing function locals-->global-->builtin
'''-----------------------------------------------------------------
5. 解释什么是GIL(全局解释器锁)
让同一时刻只能有一个线程对于python对象进行操作，在多线程的情况下只有当一个线程获得GIL权限的时候，该代码才能够运行。

'''
'''-----------------------------------------------------------------
6. 什么是线程、协程、进程
进程是系统进行资源分配和调度的一个独立单位，有自己的独立内存空间。
线程是进程的一个实体,是CPU调度和分派的基本单位。
协程是一种用户态的较量级线程，其调度完全由用户控制。

'''
'''-----------------------------------------------------------------
7. 什么时候该用多线程、什么情况该用多进程
io密集型：多线程
CPU密集型：多进程
'''
'''-----------------------------------------------------------------
8. 多个进程间如何通信？
队列，管道，socket，共享内存，信号量和事件
'''

